home *** CD-ROM | disk | FTP | other *** search
/ Disc to the Future 2 / Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin / MAC / OTHERCST / CHECKDAT.C < prev    next >
C/C++ Source or Header  |  1992-03-23  |  3KB  |  111 lines

  1. /********************************************************************************
  2.  
  3.     The following two routines can be used to check the date in any 
  4.     source code and render the software unusable after that date. This
  5.     is useful for developers who want Development/ºeta versions of their
  6.     software to die after a specific date.
  7.     
  8.     These routines were designed for use in a System Extension (INIT)
  9.     and are used in the following manner. 
  10.     
  11.     NOTE: This code is for example purposes only, I avoided some 
  12.           error-checking on purpose.
  13.     
  14.     main() {
  15.         
  16.         OSErr whoCares = noErr;
  17.         
  18.         RememberA0();                // THINK C stuff
  19.         SetUpA4();
  20.     
  21.         asm    {
  22.             _RecoverHandle
  23.             move.l    a0, h
  24.         }
  25.     
  26.         if (h == nil) {
  27.             SysBeep(0);
  28.         } else {
  29.             DetachResource (h);
  30.         }
  31.         
  32.         //
  33.         // do my stuff here
  34.         //
  35.         
  36.         //
  37.         // Now, check to see if we are expired, if so, delete our INIT resource,
  38.         // and from now on, we will not load! Works like a charm!
  39.         //
  40.         
  41.         If (IsExpired(MONTH, DAY, YEAR) == TRUE) {
  42.             whoCares = DeleteResByID('INIT', 128);
  43.         }
  44.     
  45.         RestoreA4();                // restore A4
  46.         return;
  47.         
  48.     }
  49.  
  50.     That╒s all there is to it! If you have any questions about this code,
  51.     send email to the author at any of the following addresses. Enjoy!
  52.     
  53.     America Online : AFL Zobkiw
  54.     CompuServe       : 70712,515
  55.     Internet       : 70712.515@compuserve.com
  56.  
  57. ********************************************************************************/
  58.  
  59. /* ----------------------------------------------------
  60.     see if a specific date has passed, if so, return TRUE
  61.    ---------------------------------------------------- */
  62. Boolean IsExpired(short month, short day, short year)
  63. {
  64.     long            secs      = 0;
  65.     long            lastsecs = 0;
  66.     DateTimeRec        date;
  67.     
  68.     GetDateTime(&secs);
  69.  
  70.     date.year         = year;
  71.     date.month         = month;
  72.     date.day         = day;
  73.     date.hour         = 0;    // the zero hour!
  74.     date.minute     = 0;    // no minutes
  75.     date.second     = 0;    // no seconds
  76.     date.dayOfWeek     = 0;    // ignored
  77.  
  78.     Date2Secs(&date, &lastsecs);
  79.         
  80.     if (secs >= lastsecs) {
  81.         return(TRUE);
  82.     } else {
  83.         return(FALSE);
  84.     }
  85. }
  86.  
  87. /* ----------------------------------------------------
  88.     Delete a resource by type/id and update the file
  89.    ---------------------------------------------------- */
  90. OSErr DeleteResByID(ResType    type, short id)
  91. {
  92.     Handle    h = nil;
  93.     OSErr    err = noErr;
  94.     
  95.     h = Get1Resource(type, id);
  96.     err = ResError(); if (err != noErr) return(err);
  97.  
  98.     if (h != nil) {
  99.         RmveResource(h);
  100.         err = ResError(); if (err != noErr) return(err);
  101.  
  102.         DisposHandle(h);
  103.         err = MemError(); if (err != noErr) return(err);
  104.         h = nil;
  105.         
  106.         UpdateResFile(CurResFile());
  107.         err = ResError(); if (err != noErr) return(err);
  108.     }
  109.     
  110.     return(noErr);
  111. }